package com.zenithmind.coding.service;

import com.zenithmind.coding.pojo.vo.CodeRunResultVO;

/**
 * 代码分析服务接口 - 遵循接口隔离原则，专门处理代码分析相关功能
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface CodeAnalysisService {

    /**
     * 分析代码质量
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 代码质量分析结果
     */
    CodeRunResultVO.CodeQualityAnalysis analyzeCodeQuality(String language, String sourceCode);

    /**
     * 检测代码相似度
     * 
     * @param language 编程语言
     * @param sourceCode1 源代码1
     * @param sourceCode2 源代码2
     * @return 相似度（0-1）
     */
    Double detectCodeSimilarity(String language, String sourceCode1, String sourceCode2);

    /**
     * 检测代码抄袭
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @param threshold 相似度阈值
     * @return 是否抄袭
     */
    Boolean detectPlagiarism(String language, String sourceCode, Double threshold);

    /**
     * 分析代码复杂度
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 圈复杂度
     */
    Integer analyzeComplexity(String language, String sourceCode);

    /**
     * 检查代码风格
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 风格检查报告
     */
    Object checkCodeStyle(String language, String sourceCode);

    /**
     * 检查代码安全性
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 安全检查报告
     */
    Object checkSecurity(String language, String sourceCode);

    /**
     * 分析代码性能
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 性能分析报告
     */
    Object analyzePerformance(String language, String sourceCode);

    /**
     * 获取代码建议
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 改进建议
     */
    Object getCodeSuggestions(String language, String sourceCode);

    /**
     * 分析代码结构
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 代码结构分析
     */
    Object analyzeCodeStructure(String language, String sourceCode);

    /**
     * 检测代码异味
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 代码异味报告
     */
    Object detectCodeSmells(String language, String sourceCode);

    /**
     * 计算代码度量
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @return 代码度量数据
     */
    Object calculateCodeMetrics(String language, String sourceCode);

    /**
     * 生成代码报告
     * 
     * @param language 编程语言
     * @param sourceCode 源代码
     * @param reportType 报告类型
     * @return 代码分析报告
     */
    Object generateCodeReport(String language, String sourceCode, String reportType);
}
